﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Shsc.Net.FrameWork.Common.Util
{
    public class DateUtil
    {
        #region 常量
        /** パターン(yyyyMMdd) */
        public static string DATE_PATTERN_0 = "yyyyMMdd";
        
        /** パターン(yyyyMMddHHmmssSSS) */
        public static string DATE_PATTERN_1 = "yyyyMMddHHmmssSSS";
        
        /** パターン(yyyy/MM/dd) */
        public static string DATE_PATTERN_2 = "yyyy/MM/dd";
        
        /** パターン(yyyy/MM/dd HH:mm:ss) */
        public static string DATE_PATTERN_3 = "yyyy/MM/dd HH:mm:ss";
        
        /** パターン(yy/MM/dd) */
        public static string DATE_PATTERN_4 = "yy/MM/dd";
        
        /** パターン(yyyy/MM/dd HH:mm:ss.SSS) */
        public static string DATE_PATTERN_5 = "yyyy/MM/dd HH:mm:ss.SSS";
        
        /** パターン(yyyyMM) */
        public static string DATE_PATTERN_6 = "yyyyMM";
        
        /** パターン(yyMMdd) */
        public static string DATE_PATTERN_7 = "yyMMdd";

        /** パターン(yyyy-MM-dd HH:mm:ss.SSS) */
        public static string DATE_PATTERN_8 = "yyyy-MM-dd HH:mm:ss.SSS";
        
        /** パターン(yyyy/MM/dd HH:mm) */
        public static string DATE_PATTERN_9 = "yyyy/MM/dd HH:mm";
        
        /** パターン(yyyy/MM) */
        public static string DATE_PATTERN_10 = "yyyy/MM";

        /** パターン(yyyyMMddHHmmss) */
        public static string DATE_PATTERN_11 = "yyyyMMddHHmmss";

        /** パターン(yyyy年MM月dd日) */
        public static string DATE_PATTERN_12 = "yyyy年MM月dd日";
        
        /** パターン(yy/MM) */
        public static string DATE_PATTERN_13 = "yy/MM";
        
        /** パターン(yy/MM/dd HH:mm:ss) */
        public static string DATE_PATTERN_14 = "yy/MM/dd HH:mm:ss";
        
        /** パターン(yy年MM月dd日) */
        public static string DATE_PATTERN_15 = "yy年MM月dd日";

        /** パターン(yy/MM/dd HH:mm) */
        public static string DATE_PATTERN_16 = "yy/MM/dd HH:mm";
        
        /** パターン(yyyy-MM-dd) */
        public static string DATE_PATTERN_17 = "yyyy-MM-dd";

        /** パターン(yyyy年MM月dd日) */
        public static string DATE_PATTERN_18 = "yyyy年MM月";
        #endregion

        /// <summary>
        /// 格式化日期
        /// </summary>
        /// <param name="date"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string FormatDate(DateTime date, string format)
        {
            if (date == null)
            {
                return string.Empty;
            }
            return date.ToString(format);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="date"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static DateTime ToDate(string date, string format)
        {
            return DateTime.ParseExact(date, format, null);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="date"></param>
        /// <param name="days"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string AddDays(string date, int days, string format)
        {
            return FormatDate(ToDate(date, format).AddDays(days), format);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="date"></param>
        /// <param name="days"></param>
        /// <returns></returns>
        public static DateTime AddDays(DateTime date, int days)
        {
            return date.AddDays(days);
        }
    }
}
